﻿using System;

namespace Tweetinvi.Core.Enum
{
    public class LanguageAttribute : Attribute
    {
        public string Language { get; private set; }
        public string[] Languages { get; private set; }
        public bool HasMultipleCodes { get; private set; }

        public LanguageAttribute(params string[] languages)
        {
            if (languages == null || languages.Length == 0)
            {
                throw new ArgumentException("You must specify a language code to a Language");
            }

            Language = languages[0];
            Languages = languages;
            HasMultipleCodes = languages.Length > 1;
        }
    }

    public enum Language
    {
        [Language("undefined", "xx")] Undefined = 0,
        [Language("poi")] Poi,
        [Language("ab")] Abkhaz,
        [Language("aa")] Afar,
        [Language("af")] Afrikaans,
        [Language("ak")] Akan,
        [Language("sq")] Albanian,
        [Language("am")] Amharic,
        [Language("ar")] Arabic,
        [Language("an")] Aragonese,
        [Language("hy")] Armenian,
        [Language("as")] Assamese,
        [Language("av")] Avaric,
        [Language("ae")] Avestan,
        [Language("ay")] Aymara,
        [Language("az")] Azerbaijani,
        [Language("bm")] Bambara,
        [Language("ba")] Bashkir,
        [Language("eu")] Basque,
        [Language("be")] Belarusian,
        [Language("bn")] Bengali,
        [Language("bn")] Bangla,
        [Language("bh")] Bihari,
        [Language("bi")] Bislama,
        [Language("bs")] Bosnian,
        [Language("br")] Breton,
        [Language("bg")] Bulgarian,
        [Language("my")] Burmese,
        [Language("ca")] Catalan,
        [Language("ca")] Valencian,
        [Language("ch")] Chamorro,
        [Language("ce")] Chechen,
        [Language("ny")] Chichewa,
        [Language("ny")] Chewa,
        [Language("ny")] Nyanja,
        [Language("zh")] Chinese,
        [Language("cv")] Chuvash,
        [Language("kw")] Cornish,
        [Language("co")] Corsican,
        [Language("cr")] Cree,
        [Language("hr")] Croatian,
        [Language("cs")] Czech,
        [Language("da")] Danish,
        [Language("dv")] Divehi,
        [Language("dv")] Dhivehi,
        [Language("dv")] Maldivian,
        [Language("nl")] Dutch,
        [Language("dz")] Dzongkha,
        [Language("en")] English,
        [Language("eo")] Esperanto,
        [Language("et")] Estonian,
        [Language("ee")] Ewe,
        [Language("fo")] Faroese,
        [Language("fj")] Fijian,
        [Language("fi")] Finnish,
        [Language("fr")] French,
        [Language("ff")] Fula,
        [Language("ff")] Fulah,
        [Language("ff")] Pulaar,
        [Language("ff")] Pular,
        [Language("gl")] Galician,
        [Language("ka")] Georgian,
        [Language("de")] German,
        [Language("el")] Greek,
        [Language("el")] Modern,
        [Language("gn")] Guaraní,
        [Language("gu")] Gujarati,
        [Language("ht")] Haitian,
        [Language("ht")] HaitianCreole,
        [Language("ha")] Hausa,
        [Language("he")] Hebrew,
        [Language("hz")] Herero,
        [Language("hi")] Hindi,
        [Language("ho")] HiriMotu,
        [Language("hu")] Hungarian,
        [Language("ia")] Interlingua,
        [Language("id")] Indonesian,
        [Language("ie")] Interlingue,
        [Language("iw")] Ivrit,
        [Language("ga")] Irish,
        [Language("ig")] Igbo,
        [Language("ik")] Inupiaq,
        [Language("io")] Ido,
        [Language("is")] Icelandic,
        [Language("it")] Italian,
        [Language("iu")] Inuktitut,
        [Language("ja", "jp")] Japanese,
        [Language("jv")] Javanese,
        [Language("kl")] Kalaallisut,
        [Language("kl")] Greenlandic,
        [Language("kn")] Kannada,
        [Language("kr")] Kanuri,
        [Language("ks")] Kashmiri,
        [Language("kk")] Kazakh,
        [Language("km")] Khmer,
        [Language("ki")] Kikuyu,
        [Language("ki")] Gikuyu,
        [Language("rw")] Kinyarwanda,
        [Language("ky")] Kyrgyz,
        [Language("kv")] Komi,
        [Language("kg")] Kongo,
        [Language("ko")] Korean,
        [Language("ku")] Kurdish,
        [Language("kj")] Kwanyama,
        [Language("kj")] Kuanyama,
        [Language("la")] Latin,
        [Language("lb")] Luxembourgish,
        [Language("lb")] Letzeburgesch,
        [Language("lg")] Ganda,
        [Language("li")] Limburgish,
        [Language("li")] Limburgan,
        [Language("li")] Limburger,
        [Language("ln")] Lingala,
        [Language("lo")] Lao,
        [Language("lt")] Lithuanian,
        [Language("lu")] LubaKatanga,
        [Language("lv")] Latvian,
        [Language("gv")] Manx,
        [Language("mk")] Macedonian,
        [Language("mg")] Malagasy,
        [Language("ms")] Malay,
        [Language("ml")] Malayalam,
        [Language("mt")] Maltese,
        [Language("mi")] Maori,
        [Language("mr")] Marathi,
        [Language("mh")] Marshallese,
        [Language("mn")] Mongolian,
        [Language("na")] Nauru,
        [Language("nv")] Navajo,
        [Language("nv")] Navaho,
        [Language("nb")] NorwegianBokmal,
        [Language("nd")] NorthNdebele,
        [Language("ne")] Nepali,
        [Language("ng")] Ndonga,
        [Language("nn")] NorwegianNynorsk,
        [Language("no")] Norwegian,
        [Language("ii")] Nuosu,
        [Language("in")] Indian,
        [Language("nr")] SouthNdebele,
        [Language("oc")] Occitan,
        [Language("oj")] Ojibwa,
        [Language("oj")] Ojibwe,
        [Language("cu")] OldChurchSlavonic,
        [Language("cu")] ChurchSlavic,
        [Language("cu")] ChurchSlavonic,
        [Language("cu")] OldBulgarian,
        [Language("cu")] OldSlavonic,
        [Language("om")] Oromo,
        [Language("or")] Oriya,
        [Language("os")] Ossetian,
        [Language("os")] Ossetic,
        [Language("pa")] Panjabi,
        [Language("pa")] Punjabi,
        [Language("pi")] Pali,
        [Language("fa")] Persian,
        [Language("fa")] Farsi,
        [Language("pl")] Polish,
        [Language("ps")] Pashto,
        [Language("ps")] Pushto,
        [Language("pt")] Portuguese,
        [Language("qu")] Quechua,
        [Language("rm")] Romansh,
        [Language("rn")] Kirundi,
        [Language("ro")] Romanian,
        [Language("ru")] Russian,
        [Language("sa")] Sanskrit,
        [Language("sc")] Sardinian,
        [Language("sd")] Sindhi,
        [Language("se")] NorthernSami,
        [Language("sm")] Samoan,
        [Language("sg")] Sango,
        [Language("sr")] Serbian,
        [Language("gd")] ScottishGaelic,
        [Language("gd")] Gaelic,
        [Language("sn")] Shona,
        [Language("si")] Sinhala,
        [Language("si")] Sinhalese,
        [Language("sk")] Slovak,
        [Language("sl")] Slovene,
        [Language("so")] Somali,
        [Language("st")] SouthernSotho,
        [Language("az")] SouthAzerbaijani,
        [Language("es")] Spanish,
        [Language("es")] Castilian,
        [Language("su")] Sundanese,
        [Language("sw")] Swahili,
        [Language("ss")] Swati,
        [Language("sv", "se")] Swedish,
        [Language("ta")] Tamil,
        [Language("te")] Telugu,
        [Language("tg")] Tajik,
        [Language("th")] Thai,
        [Language("ti")] Tigrinya,
        [Language("bo")] Tibetan,
        [Language("tk")] Turkmen,
        [Language("tl")] Tagalog,
        [Language("tn")] Tswana,
        [Language("to")] Tonga,
        [Language("tr")] Turkish,
        [Language("ts")] Tsonga,
        [Language("tt")] Tatar,
        [Language("tw")] Twi,
        [Language("ty")] Tahitian,
        [Language("ug")] Uyghur,
        [Language("ug")] Uighur,
        [Language("uk")] Ukrainian,
        [Language("ur")] Urdu,
        [Language("uz")] Uzbek,
        [Language("ve")] Venda,
        [Language("vi")] Vietnamese,
        [Language("vo")] Volapuk,
        [Language("wa")] Walloon,
        [Language("cy")] Welsh,
        [Language("wo")] Wolof,
        [Language("fy")] WesternFrisian,
        [Language("xh")] Xhosa,
        [Language("yi")] Yiddish,
        [Language("yo")] Yoruba,
        [Language("za")] Chuang,
        [Language("za")] Zhuang,
        [Language("zu")] Zulu,

        [Language("un")] UN_NotReferenced
    }
}